﻿package view.mainUI.mainBottom.controller
{
    import __AS3__.vec.*;
    import com.core.*;
    import flash.display.*;
    import flash.events.*;
    import flash.geom.*;
    import flash.system.*;
    import flash.utils.*;
    import manager.*;
    import plugin.NewSkill.consts.*;
    import view.appDrag.*;
    import view.mainUI.mainBottom.component.*;
    import view.mainUI.mainBottom.ui.*;

    public class MainSkillControl extends Object
    {
        private var mUI:MainBottom;
        private var mSkillList:Vector.<MainSkillItem>;
        private const SKILL_COUNT:int = 10;
        private const SHORTCUTS:Array;
        private var _toolCfg:Object;
        public static const skillEffect:Class = MainSkillControl_skillEffect;

        public function MainSkillControl(param1:MainBottom)
        {
            this.SHORTCUTS = [1, 2, 3, 4, 5, "Q", "W", "E", "R", "T"];
            this.mUI = param1;
            this.mSkillList = new Vector.<MainSkillItem>;
            this._toolCfg = ConfigDictionary.data.item;
            this.startLoad();
            return;
        }// end function

        private function startLoad() : void
        {
            var _loc_1:* = new skillEffect() as ByteArray;
            var _loc_2:* = new Loader();
            _loc_2.contentLoaderInfo.addEventListener(Event.COMPLETE, this.loadComplete);
            _loc_2.loadBytes(_loc_1, new LoaderContext(false, ApplicationDomain.currentDomain));
            return;
        }// end function

        private function loadComplete(event:Event) : void
        {
            this.createSkills();
            AppDragMgr.addEventListener(AppDragEvent.DRAG, this.acceptDrag);
            var _loc_2:* = Control.create(MainShortcutControl, this);
            ModelProxy.addObserver("fastlist", _loc_2);
            return;
        }// end function

        private function createSkills() : void
        {
            var _loc_3:MainSkillItem = null;
            var _loc_1:* = ModelProxy.getValue("data", "setskill");
            var _loc_2:int = 0;
            while (_loc_2 < this.SKILL_COUNT)
            {
                
                _loc_3 = new MainSkillItem();
                _loc_3.shortcut = String(this.SHORTCUTS[_loc_2]);
                if (_loc_1 && _loc_1[(_loc_2 + 1)])
                {
                    _loc_3.setInfo(_loc_1[(_loc_2 + 1)][1], _loc_1[(_loc_2 + 1)][0]);
                }
                _loc_3.x = 45 * _loc_2;
                this.ui.skillBox.addChild(_loc_3);
                this.mSkillList.push(_loc_3);
                _loc_2++;
            }
            return;
        }// end function

        public function refreshSkills() : void
        {
            var _loc_5:Object = null;
            var _loc_1:* = UserData.getUserData("skills");
            var _loc_2:* = ModelProxy.getValue("data", "setskill");
            var _loc_3:int = 0;
            var _loc_4:* = this.mSkillList.length;
            _loc_3 = 0;
            while (_loc_3 < _loc_4)
            {
                
                if (_loc_2 && _loc_2[(_loc_3 + 1)])
                {
                    this.mSkillList[_loc_3].setInfo(_loc_2[(_loc_3 + 1)][1], _loc_2[(_loc_3 + 1)][0]);
                    for each (_loc_5 in _loc_1)
                    {
                        
                        if (_loc_5.hasOwnProperty("skillid") && _loc_5.skillid == this.mSkillList[_loc_3].id)
                        {
                            if (int(_loc_5["switch"]) > 0 && _loc_5.on == 1)
                            {
                                this.mSkillList[_loc_3].changeSkillEffect(true);
                                break;
                            }
                        }
                    }
                }
                _loc_3++;
            }
            return;
        }// end function

        public function updateAutoSkillMovie() : void
        {
            var _loc_1:* = this.mSkillList.length;
            var _loc_2:int = 0;
            while (_loc_2 < _loc_1)
            {
                
                if (this.mSkillList && this.mSkillList[_loc_2])
                {
                    this.mSkillList[_loc_2].checkAuto();
                }
                _loc_2++;
            }
            return;
        }// end function

        public function dragSkillComplate(param1:Point, param2:Object) : void
        {
            var _loc_3:* = param2.skillid;
            var _loc_4:int = 1;
            if (param2.itemtype)
            {
                _loc_4 = 2;
                _loc_3 = param2.itemid;
            }
            var _loc_5:int = 0;
            var _loc_6:* = this.mSkillList.length;
            _loc_5 = 0;
            while (_loc_5 < _loc_6)
            {
                
                if (this.mSkillList[_loc_5].hitTestPoint(param1.x, param1.y))
                {
                    if (_loc_3 != this.mSkillList[_loc_5].id || _loc_4 != this.mSkillList[_loc_5].type)
                    {
                        PluginManager.instance.sendToServer("skill", CMDSkill.SetSkill, {id:_loc_3, type:_loc_4, topos:(_loc_5 + 1)});
                    }
                    break;
                }
                _loc_5++;
            }
            return;
        }// end function

        public function startCD(param1:int, param2:int = 0) : void
        {
            var _loc_3:* = ConfigDictionary.data.skill;
            var _loc_4:int = 0;
            if (_loc_3[param1])
            {
                _loc_4 = _loc_3[param1].cdonly;
            }
            var _loc_5:int = 0;
            var _loc_6:* = this.mSkillList.length;
            _loc_5 = 0;
            while (_loc_5 < _loc_6)
            {
                
                if (param1 >= 100000)
                {
                    if (this.mSkillList[_loc_5].type == 2)
                    {
                        if (this._toolCfg[this.mSkillList[_loc_5].id].pubcd == this._toolCfg[param1].pubcd)
                        {
                            this.mSkillList[_loc_5].startOwnCD();
                        }
                    }
                }
                else if (this.mSkillList[_loc_5].type == 1)
                {
                    if (this.mSkillList[_loc_5].data.cdonly == _loc_4)
                    {
                        if (this.mSkillList[_loc_5].id == param1)
                        {
                            this.mSkillList[_loc_5].startOwnCD(param2);
                        }
                        else
                        {
                            this.mSkillList[_loc_5].startShareCD();
                        }
                    }
                }
                _loc_5++;
            }
            return;
        }// end function

        public function initBagItems() : void
        {
            var _loc_1:int = 0;
            var _loc_2:* = this.mSkillList.length;
            _loc_1 = 0;
            while (_loc_1 < _loc_2)
            {
                
                this.mSkillList[_loc_1].updateItemNum();
                _loc_1++;
            }
            return;
        }// end function

        public function updateItem(param1:Object) : void
        {
            var _loc_3:String = null;
            var _loc_4:Object = null;
            var _loc_5:int = 0;
            var _loc_6:int = 0;
            var _loc_2:int = 0;
            for (_loc_3 in param1)
            {
                
                if (int(_loc_3) >= 1)
                {
                    _loc_4 = param1[_loc_3];
                    if (_loc_4 == null)
                    {
                        _loc_2 = ModelProxy.getValue("data", "changeid");
                        continue;
                    }
                    if (_loc_4[2] == 2)
                    {
                        _loc_2 = _loc_4[0];
                    }
                }
            }
            if (_loc_2 > 0)
            {
                _loc_5 = 0;
                _loc_6 = this.mSkillList.length;
                _loc_5 = 0;
                while (_loc_5 < _loc_6)
                {
                    
                    if (this.mSkillList[_loc_5].id == _loc_2)
                    {
                        this.mSkillList[_loc_5].updateItemNum();
                        break;
                    }
                    _loc_5++;
                }
            }
            return;
        }// end function

        public function swapSkill(param1:Object) : void
        {
            var _loc_8:int = 0;
            var _loc_9:int = 0;
            var _loc_10:int = 0;
            var _loc_11:int = 0;
            var _loc_2:* = ModelProxy.getValue("data", "setskill");
            if (_loc_2 == null)
            {
                _loc_2 = new Object();
                ModelProxy.change("data", "setskill", _loc_2);
            }
            var _loc_3:* = param1[0];
            var _loc_4:* = param1[1];
            var _loc_5:* = this.mSkillList[(_loc_3 - 1)];
            var _loc_6:* = this.mSkillList[(_loc_4 - 1)];
            _loc_2[_loc_3] = [_loc_6.type, _loc_6.id];
            _loc_2[_loc_4] = [_loc_5.type, _loc_5.id];
            var _loc_7:* = getTimer();
            if (_loc_6.data)
            {
                _loc_9 = _loc_6.id;
                _loc_10 = _loc_6.type;
                _loc_8 = _loc_5.getCurCd(_loc_7);
                _loc_11 = _loc_6.getCurCd(_loc_7);
                _loc_6.setInfo(_loc_5.id, _loc_5.type);
                _loc_5.setInfo(_loc_9, _loc_10);
                if (_loc_8 > 0)
                {
                    _loc_6.startOwnCD(_loc_8);
                }
                else
                {
                    _loc_6.stopCD();
                }
                if (_loc_11 > 0)
                {
                    _loc_5.startOwnCD(_loc_11);
                }
                else
                {
                    _loc_5.stopCD();
                }
            }
            else
            {
                _loc_8 = _loc_5.getCurCd(_loc_7);
                _loc_6.setInfo(_loc_5.id, _loc_5.type);
                if (_loc_8 > 0)
                {
                    _loc_6.startOwnCD(_loc_8);
                }
                else
                {
                    _loc_6.stopCD();
                }
                _loc_5.cancel();
            }
            return;
        }// end function

        public function setSkill(param1:Object) : void
        {
            var _loc_8:Boolean = false;
            var _loc_2:* = ModelProxy.getValue("data", "setskill");
            if (_loc_2 == null)
            {
                _loc_2 = new Object();
                ModelProxy.change("data", "setskill", _loc_2);
            }
            var _loc_3:* = param1[0];
            var _loc_4:* = param1[1];
            var _loc_5:* = param1[2];
            if (_loc_4 == 2)
            {
                ModelProxy.change("data", "settoolid", _loc_3);
            }
            var _loc_6:int = 0;
            var _loc_7:* = this.mSkillList.length;
            _loc_6 = 0;
            while (_loc_6 < _loc_7)
            {
                
                if (this.mSkillList[_loc_6].id == _loc_3 && this.mSkillList[_loc_6].type == _loc_4)
                {
                    if (_loc_6 == (_loc_5 - 1))
                    {
                        return;
                    }
                    this.mSkillList[_loc_6].cancel();
                    _loc_2[(_loc_6 + 1)] = [0, 0];
                    break;
                }
                _loc_6++;
            }
            if (_loc_5 > 0)
            {
                if (this.mSkillList[(_loc_5 - 1)])
                {
                    _loc_8 = ModelProxy.getValue("data", "skillGet" + _loc_3);
                    if (!_loc_8)
                    {
                        this.mSkillList[(_loc_5 - 1)].setInfo(_loc_3, _loc_4);
                    }
                    else
                    {
                        ModelProxy.change("data", "skillGet" + _loc_3, false);
                    }
                }
                _loc_2[_loc_5] = [_loc_4, _loc_3];
            }
            return;
        }// end function

        public function cancelSkill(param1:int) : void
        {
            var _loc_2:* = ModelProxy.getValue("data", "setskill");
            if (this.mSkillList[(param1 - 1)])
            {
                this.mSkillList[(param1 - 1)].cancel();
            }
            _loc_2[param1] = [0, 0];
            return;
        }// end function

        public function changeSetSkill(param1:int, param2:int) : void
        {
            var _loc_3:int = 0;
            var _loc_4:* = this.mSkillList.length;
            _loc_3 = 0;
            while (_loc_3 < _loc_4)
            {
                
                if (this.mSkillList[_loc_3].id == param2)
                {
                    if (param1 == 1)
                    {
                        this.mSkillList[_loc_3].changeSkillEffect(true);
                    }
                    else
                    {
                        this.mSkillList[_loc_3].changeSkillEffect(false);
                    }
                    break;
                }
                _loc_3++;
            }
            return;
        }// end function

        private function acceptDrag(event:AppDragEvent) : void
        {
            var _loc_6:int = 0;
            var _loc_7:int = 0;
            var _loc_2:* = event.targetObj as MainSkillItem;
            if (!_loc_2)
            {
                return;
            }
            var _loc_3:Boolean = false;
            var _loc_4:* = this.mSkillList.length;
            var _loc_5:int = 0;
            while (_loc_5 < _loc_4)
            {
                
                if (this.mSkillList[_loc_5].hitTestPoint(event.hitPoint.x, event.hitPoint.y, true))
                {
                    _loc_3 = true;
                    if (this.mSkillList[_loc_5] != _loc_2)
                    {
                        _loc_6 = this.mSkillList.indexOf(_loc_2) + 1;
                        _loc_7 = _loc_5 + 1;
                        PluginManager.instance.sendToServer("skill", CMDSkill.SwapSkill, {pos:_loc_6, topos:_loc_7});
                    }
                    break;
                }
                _loc_5++;
            }
            if (!_loc_3)
            {
                PluginManager.instance.sendToServer("skill", CMDSkill.CancelSkill, (this.mSkillList.indexOf(_loc_2) + 1));
            }
            return;
        }// end function

        public function showDelay(param1:Object) : void
        {
            this.mSkillList[param1.pos].setInfo(param1.id, param1.type);
            return;
        }// end function

        private function get ui() : MainBottom
        {
            return this.mUI;
        }// end function

    }
}
